<?php
/*
 * Universelle <ul>-Navigation (YAML)
 * YAML-Navigationstemplate
 * V 0.9
 *
 * YAML3.0-konformes universelles Navigations-Template
 * fuer Redaxo 3.x/4.x
 *
 * 	Navigationstemplate zur Gestaltung von Seitennavigationen/-menues auf der
 * 	Grundlage unsortierter Listen (<ul></ul>) mit folgenden Funktionen:
 *  - Durch eine Meta-Info cat_styleclass kann jeder beliebigen Kategorie eine
 *    individuelle Style-Klasse hinzugefuegt werden
 * 	- An YAML CSS-Framework angepasst, funktioniert aber auch eigenstaendig
 * 	- beliebige Verschachtelungstiefe
 * 	- Veroeffentlichungszeitraum (Online vom/bis) wird beachtet
 * 	- individuelle Benutzerbereiche des Simple User - Addon 0.9 und 1.1
 *    und Community Addon werden ausgewertet
 * 	- Verschachtelung der unsortierten Listen wahlweise mit w3c-konformer
 * 	  <ul>-Gliederung im jeweils uebergeordnetern <li>-Element oder als
 * 	  "Pseudo"-Verschachtelung in nur einem <ul>-Element
 * 	- Wahlweise Anzeige der Untermenuepunkte nur der aktuellen Kategorie oder
 * 	  Anzeige aller Untermenuepunkte
 * 	- Wahlweise getrennte Anzeige von Haupt- und Untermenue
 * 	- Generierung eines Breadcrumb-Menues
 *  - zusaetzliches Navigationsmenue aus root-Artikeln moeglich
 *
 * weitere ausfuehrliche Erlaeuterungen zu diesem Template neben den
 * Hinweisen im Quelltext auch unter:
 *
 * http://www.raybeam.de/index.php?article_id=20
 * http://www.raybeam.de/index.php?article_id=35
 *
 * -----------------------------
 * Peter Reiche - www.raybeam.de
 * -----------------------------
 * letzte Aenderung: 15.11.08
 * Individuelle Styleklassen ueber Meta-Infos
 * -----------------------------
 * letzte Aenderung: 06.09.08
 * Anpassung an Simple User 1.1
 * -----------------------------
 * letzte Aenderung: 15.08.08
 * Anpassung an redaxo-community-addon
 * -----------------------------
 * letzte Aenderung: 01.05.2008
 * -Neue Navigationsmoeglichkeit
 * anhand von root-Artikeln hinzugefuegt
 * -Bei getrennter Darstellung von Haupt-/Untermenue
 * wird dem Untermenue der Hauptmenuename als Titel hinzugefuegt
 * -----------------------------
 * letzte Aenderung: 27.02.2008:
 * Anpassung an redaxo 3.x/4.x
 * -----------------------------
 * letzte Aenderung: 15.12.2014:
 * Aus dem Gaulquappen Template heraus erstellt
 * -----------------------------
 */

function build_navigation()
{
	/* Wenn der Veroeffentlichungszeitraum "Online von / bis zum" nicht zutrifft, wird der
	 * Navigationslink nicht angezeigt. Artikel die direkt ueber den URL aufgerufen
     * wurden, werden jedoch immer noch angezeigt. Das entsprechende Seiten-Template
     * muss also bezuegl. des Veroeffentlichungszeitraums ebenfalls angepasst werden. */
    $time = time();

    /* Type-ID fuer den "SuperUser", der alle individuellen Menuepunkte sehen darf.
	 * Die ID sollte mit dem $su-Wert aus dem Authentifizierungstemplate uebereinstimmen. */
	$su = 99;
		
	foreach($nav->getChildren(1) as $sub)
	{
		$navigation.=$sub->getName();
	}
/*
   	if($chkUsrPerm && $chkSimpleUsrGrp && ($artTypeId=='1' || $feUser['typ'] == $artTypeId || $feUser['typ'] == $su))
   	{
   		// Falls MetaInfo cat_styleclass vorhanden ist, Klasseneintrag
   		// 'class="cat_styleclass-Wert" ' generieren
   		if($nav->getValue($REX['csMetaInfo']))
   		{
   			$oStyleClass = ' class="'.$nav->getValue($REX['csMetaInfo']).'" ';
   		}

   		// "geoeffnete" Rootkategorie durch css-ID 'current' markieren
       	if($pathIndex==1 || ($pathIndex==2 && $subUl=='extra'))
       	{
       		if($pathIndex==1)
       		{
       			$oStyleID=' id="current"';
       		}
       		else
       		{
       			$oStyleID=' id="current'.$pathIndex.'"';
       		}
       	}
		else
		{
        	$oStyleID=' id="active"';
		}

      	// Nur Submenue des aktuellen Root anzeigen
      	if($subUl=='on' || $subUl=='off' || $subUl=='extra')
      	{
      		if($nav->getId()==$path[$pathIndex])
      		{
      			// Namen der aktuellen root-Kategorie als Titel fuer
      			// das Submenue uebernehmen
      			if($pathIndex==1)
      			{
      				$subNavigation='<li id="title"'.$oStyleClass.'>'.$nav->getName()."</li>\n";
      			}

      			// Durch ...->getChildren(1) anstatt ...->getChildren() werden
        		// nur Kategorien durchlaufen die "online" sind
        		if($nav->getChildren(1))
        		{
      				if((count($path) > $pathIndex) && ($path[$pathIndex + 1] > 0))
           			{
           				if($pathIndex>1 && $subUl=='extra')
           				{
           					$subNavigation.='<li'.$oStyleID.$oStyleClass.'><a href="'.$nav->getUrl().'">4</a>';
           				}
           				else
           				{
        					if($oStyleID==' id="active"')$oStyleID='';
							//gehört zum menü - gewähltes menü mit gewählten untermenü
            				$navigation.='<li><a class="menu_ebene1_active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
            			}
            		}
            		else
            		{
            			// bei 'extra' wuerde der root-Navigationspunkt ins submenue verschoben, soll er aber nicht
            			if($pathIndex>1 && $subUl=='extra')
            			{
            				$subNavigation.='<li'.$oStyleID.$oStyleClass.'><a  href="'.$nav->getUrl().'">2</a>';
            			}
            			else
            			{	//gehört zum menü-gewählte kategorie mit untermenü
            				$navigation.='<li><a class="menu_ebene1_active" href="'.$nav->getUrl().'">'.$nav->getName().'</a></li>';
            			}
            		}
            		// Wenn keine untergeordneten <ul>-Tags im Menue verwendet
            		// werden sollen ($subUl='off'), wird der <li>-Tag geschlossen
					if($subUl=='off')
            		{
            			$navigation.= '</li>'."\n";
            		}
            		// Wenn untergeordnete <ul>-Tags im Menue verwendet
            		// werden sollen ($subUl='on'), wird in dem noch offenen
            		// <li>-Tag der <ul>-Tag geoeffnet
            		else
            		{
            			if($pathIndex>1 && $subUl=='extra')
            			{
            				//$subNavigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
            			}
            			else
            			{
            				//$navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
            			}
            		}
            		// Durch ...->getChildren(1) anstatt ...->getChildren() werden
            		// nur Kategorien durchlaufen die "online" sind - dazu wird die
            		// Funktion erneut aufgegrufen
            		foreach($nav->getChildren(1) as $sub)
            		{
            			$tmpNav=build_navigation($feUser, $sub, $path,$subUl, $pathIndex+1);
            			$navigation.=$tmpNav[0];
            			$subNavigation.=$tmpNav[1];
            		}
            		// Wenn untergeordnete <ul>-Tags im Menue verwendet
            		// werden sollen ($subUl='on'), wird der <ul>-Tag hier wieder geschlossen
            		if($subUl=='on' || $subUl=='extra')
            		{
            			if($pathIndex>1 && $subUl=='extra')
            			{
            				//$subNavigation.="</ul>\n";
            			}
            			else
            			{
            				//$navigation.="</ul>\n";
            			}
            		}
            	}
            	else
            	{
					if($pathIndex>1 && $subUl=='extra')
					{
       					$subNavigation.='<li'.$oStyleID.$oStyleClass.'><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">99</a>';
       				}
       				else
       				{
       					if($pathIndex>1){
												//gehört zum menü gewähltes untermenü	
												$navigation.='<li><a class="menu_ebene2_active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                                                
												$navLeftCol2.='<li><a class="menu_ebene2_active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
						}else{					//gehört um menü
												$navigation.='<li><a class="menu_ebene1_active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';

						}
       				}

					if($subUl=='off')
       				{
       					$navigation.= '</li>'."\n";
       				}
           		}
           	}
           	else
     		{
				if($pathIndex>1 && $subUl=='extra')
				{
					$subNavigation.='<li'.$oStyleClass.'><a href="'.$nav->getUrl().'">66</a>';
				}
				else
				{
					if($pathIndex>1){
					//gehört zum menü - nicht gewähltes untermenü
					$navigation.='<li><a class="menu_ebene2_nonactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
					$navLeftCol2.='<li><a class="menu_ebene2_nonactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
					}else{
					//gehört zum menü
					$navigation.='<li><a class="menu_ebene1_nonactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';

					}
				}

				if($subUl=='off')
       			{
       				$navigation.= '</li>'."\n";
          		}
          	}
			if($subUl=='on' || $subUl=='extra')
        	{
        		if($pathIndex>1 && $subUl=='extra')
        		{
        			$subNavigation.= '</li>'."\n";
        		}
        		else
        		{
        			$navigation.= '</li>'."\n";
        		}
      		}
      	}
      	// Submenues aller Kategorien anzeigen
      	elseif($subUl=='allOn' || $subUl=='allOff')
      	{
      		if($nav->getChildren(1))
        	{
        		// ID="active" bei aktiver Unterkategorie wieder loeschen
        		if((count($path) > $pathIndex) && ($path[$pathIndex + 1] > 0))
        		{
        			if($oStyleID==' id="active"')$oStyleID='';
        		}

       			if($nav->getId()==$path[$pathIndex])
           		{
           			$navigation.='<li'.$oStyleID.$oStyleClass.' ><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
           		}
           		else
           		{
           			$navigation.='<li'.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
           		}
           		// Wenn keine untergeordneten <ul>-Tags im Menue verwendet
           		// werden sollen ($subUl='allOff'), wird der <li>-Tag geschlossen
				if($subUl=='allOff')
           		{
           			$navigation.= '</li>'."\n";
           		}
           		// Wenn untergeordnete <ul>-Tags im Menue verwendet
           		// werden sollen ($subUl='allOn'), wird in dem noch offenen
           		// <li>-Tag der <ul>-Tag geoeffnet
           		else
           		{
           			//$navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
           		}
           		foreach($nav->getChildren(1) as $sub)
           		{
          			$tmpNav=build_navigation($feUser, $sub, $path,$subUl, $pathIndex+1);
           			$navigation.=$tmpNav[0];
           		}
           		// Wenn untergeordnete <ul>-Tags im Menue verwendet
           		// werden sollen ($subUl='allOn'), wird der <ul>-Tag hier wieder geschlossen
           		if($subUl=='allOn')
           		{
           			$navigation.="</ul>\n";
           		}
       		}
       		else
       		{
       			if($nav->getId()==$path[$pathIndex])
       			{
       				$navigation.='<li'.$oStyleID.$oStyleClass.'><a href="'.$nav->getUrl().'">HIER</a>';
       			}
       			else
       			{
       				$navigation.='<li'.$oStyleClass.'><a href="'.$nav->getUrl().'">da</a>';
       			}
           		if($subUl=='allOff')
       			{
       				$navigation.= '</li>'."\n";
       			}
       		}
       	}
   		if($subUl=='allOn')
      	{
     		$navigation.= '</li>'."\n";
   		}
   	}
	// Kleiner Trick, falls ausser der root-Kategorie alle weiteren aufgrund
    // der Rechtevergabe ausgeblendet sind. Um validen HTML-Code zu erhalten
    // muss am Ende des $navigations-String "<ul class=\"\">\n</ul>"
    // geloescht werden
    if(strstr($navigation,"<ul class=\"subnav1\">\n</ul>"))
    {
    	//$navigation = str_replace("\n<ul class=\"subnav1\">\n</ul>","\n",$navigation);
    }
    $navArray=array();
    $navArray[0].=$navigation;
    $navArray[1].=$subNavigation;
   	return $navArray;
	
		$navLeftCol2.='</div>';
*/
	
}  // ------------------ Ende der function build_navigation ------------------



?>